#include <bits/stdc++.h>
using namespace std;

#define ONLINE_JUDGE

#ifndef ONLINE_JUDGE
#define dbg(x...)                             \
	{                                         \
		cerr << "\033[32;1m" << #x << " -> "; \
		err(x);                               \
	}
void err()
{
	cerr << "\033[39;0m" << endl;
}
template <typename T, typename... A>
void err(T a, A... x)
{
	cerr << a << ' ';
	err(x...);
}
#else
#define dbg(...)
#endif

typedef long long LL;

const int N = 105;

int n;

int dp[N][N][N][2];

int a[N];

bool vis[N];

inline void update(int &a, int b)
{
	if (b == -1) return;
	if (a == -1 || a > b) a = b;
}

int main(int argc, char const *argv[])
{
	scanf("%d", &n);
	int confirm = 0;
	for (int i = 1; i <= n; ++i)
	{
		scanf("%d", &a[i]);
		if (a[i] > 0)
		{
			vis[a[i]] = true;
			confirm++;
		}
	}

	int cnt[2] = {0, 0};
	for (int i = 1; i <= n; ++i)
		if (!vis[i])
			cnt[i & 1]++;

	memset(dp, -1, sizeof dp);
	dp[0][cnt[0]][cnt[1]][0] = dp[0][cnt[0]][cnt[1]][1] = 0;

	for (int i = 0; i < n; ++i)
		for (int j = 0; j <= cnt[0]; ++j)
			for (int k = 0; k <= cnt[1]; ++k)
				for (int l = 0; l < 2; ++l)
				{
					if (dp[i][j][k][l] == -1)
						continue;

					dbg(i, j, k, l, dp[i][j][k][l]);
					if (a[i + 1] > 0)
					{
						update(dp[i + 1][j][k][a[i + 1] & 1], dp[i][j][k][l] + (l != (a[i + 1] & 1)));
					}
					else
					{
						if (j)
							update(dp[i + 1][j - 1][k][0], dp[i][j][k][l] + (l & 1));
						if (k)
							update(dp[i + 1][j][k - 1][1], dp[i][j][k][l] + !(l & 1));
					}
				}
	int ans = n + 1;
	if (~dp[n][0][0][0])
		ans = min(ans, dp[n][0][0][0]);
	if (~dp[n][0][0][1])
		ans = min(ans, dp[n][0][0][1]);
	printf("%d\n", ans);
	return 0;
}